﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using S = Szamlazz.Data.Response;

namespace Szamlazz.Utils
{
	/// <summary>
	/// Hibákat tartalmazó osztály
	/// </summary>
	public class Errors
	{ 
		public static IReadOnlyDictionary<int, Error> Codes { get { return Data; } }
		private static ReadOnlyDictionary<int, Error> Data { get; set; }
		static Errors()
		{
			Data = new ReadOnlyDictionary<int, Error>();

			Data.Add(1, new Error(1, "Számla Agent belső hiba, erről a Számlázz.hu üzemeltetés értesül, a hívó félnek nincs teendője."));
			Data.Add(3, new Error(3, "Bejelentkezési hiba - a megadott login név és jelszó pároshoz nem létezik felhasználó"));
			Data.Add(49, new Error(49, "Elektronikus számla készítéséhez kérem adja meg a kulcstartót nyitó titkos jelszavát. "));
			Data.Add(53, new Error(53, "Hiányzó XML fájl. Valószínűleg nem fájlként lett átküldve az xml hanem mint egy html input tartalma."));
			Data.Add(54, new Error(54, "E-számla készítés nincs engedélyezve . Valószínűleg a díjcsomagjában ez nincs benne vagy pedig nincs saját tanúsítvány feltöltve, ilyenkor el kell fogadnia egy szerződést mely alapján a KBOSS.hu Kft tanúsítványával készíthet majd számlákat. Keresse ügyfélszolgálatunkat."));
			Data.Add(55, new Error(55, "E-számla aláírása sikertelen. Vagy lejárt a tanúsítványa vagy nem elérhető az időpecsét szerver. Keresse ügyfélszolgálatunkat."));
			Data.Add(56, new Error(56, "A számla mentése sikerült, de a számlaértesítő küldése sikertelen. Tehát ez egy speciális eset mert ilyenkor a számla elkészül, csak a számla emailben továbbítása nem sikerül. Ebben az esetben Ön kap emailt arról, hogy melyik számla küldése nem sikerült, és azt manuálisan el lehet küldeni."));
			Data.Add(57, new Error(57, "Az átküldött XML-ben valamilyen hiba van, a válasz body tartalmaz részletesebb hibaüzenetet."));
			Data.Add(135, new Error(135, "Számla Agent futtatásához kérjük böngészőjében lépjen ki a Számlázz.hu rendszerből . Ilyen akkor fordul elő, ha be van lépve a Számlázz.hu rendszerbe és a böngésző egy másik ablakában a teszt html oldallal teszteli az xml-jét."));
			Data.Add(136, new Error(136, "Valamilyen okból nem használhatja a Számla Agentet, ezek a következők lehetnek: • lejárt a díjcsomagja • e-számla díj kiegyenlítése szükséges • elvárt utalással késik. Ezen esetekben kérjük lépjen be a Számlázz.hu rendszerbe és a díjcsomagom menüben ellenőrizze tartozásait."));
			Data.Add(138, new Error(138, "Kérem ellenőrizze a számla tételek összegeit és az áfakulcsot. A nettó + áfa = bruttó, a nettó ár * mennyiség = nettó érték, adatoknak egyeznie kell."));
		}
	}

	/// <summary>
	/// Hiba meta adatok
	/// </summary>
	public class Error
	{
		/// <summary>
		/// Kód és üzenet alapján hozza létre a hibát
		/// </summary>
		/// <param name="code">Hiba kódja</param>
		/// <param name="message">Hibaüzenet</param>
		internal Error(int code, string message)
		{
			this.Code = code;
			this.CodeString = code.ToString();
			this.Message = message;
		}

		/// <summary>
		/// Válasz üzenet alapján hozza létre a hibát
		/// </summary>
		/// <param name="response">Válasz üzenet</param>
		internal Error(S.szamlavalasz response)
		{
			this.CodeString = response.hibakod;
			this.Message = response.hibauzenet;
		}

		/// <summary>
		/// Hiba kódja
		/// </summary>
		public int Code { get; private set; }
		/// <summary>
		/// Hiba kódja szövegesen
		/// </summary>
		public string CodeString { get; private set; }
		/// <summary>
		/// Hiba üzenete
		/// </summary>
		public string Message { get; private set; }
	}
}
